#ifndef COMMON_H_V3
#define COMMON_H_V3

#include <array>
#include <cstddef>

namespace memoryPoolV3 {
// 对齐数和大小
constexpr std::size_t ALIGNMENT = 8;
constexpr std::size_t MAX_BYTES = 256 * 1024;
constexpr std::size_t FREE_LIST_SIZE = MAX_BYTES / ALIGNMENT; // alignment = sizeof(void*)

struct BlockHeader {
    // 内存块头部信息
    std::size_t size;  // 块大小
    bool inUse;        // 使用中
    BlockHeader *next; // 指向下一块
};

class SizeClass {
    // 大小类管理
public:
    static std::size_t roundUp(std::size_t bytes) {
        return (bytes + ALIGNMENT - 1) & ~(ALIGNMENT - 1);
    }

    static std::size_t getIndex(std::size_t bytes) {
        bytes = std::max(bytes, ALIGNMENT);
        // 向上取整后 -1
        return (bytes + ALIGNMENT - 1) / ALIGNMENT - 1;
    }
};
} // namespace memoryPoolV3

#endif